package doInterce.impl;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.swing.clipboard.ClipboardUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.StrUtil;
import doInterce.DoInterface;
import utils.DBUtil;
import utils.ExceptionUtil;
import utils.YearUtil;
import utils.YmlUtil;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * @Description: 查找公统没有生成的单位
 * @Author: syh
 * @Date: 2024/01/12/9:12
 */
public class DoFindGTNotGenerateUnit implements DoInterface {
    @Override
    public void doExecute() {
        Map<String, Object> ymlMap = YmlUtil.getYmlMap();
        String url = Convert.toStr(ymlMap.get("url"));
        String userName = Convert.toStr(ymlMap.get("userName"));
        String password = Convert.toStr(ymlMap.get("password"));

        start(DBUtil.getConnection(url,userName,password));

    }

    public void start(Connection conn) {
        String[] gwyTableArr = {"第一表   公务员数量变化情况（一）","第一表   公务员数量变化情况（二）","第二表   公务员分布情况","第三表   公务员基本情况（中央一级机关）（一）","第三表   公务员基本情况（中央一级机关）（二）","第四表   公务员基本情况（中央设在地方机关）（一）","第四表   公务员基本情况（中央设在地方机关）（二）","第五表   公务员基本情况（省、区、市一级机关）（一）","第五表   公务员基本情况（省、区、市一级机关）（二）","第六表   公务员基本情况（省、区、市设在地方机关）（一）","第六表   公务员基本情况（省、区、市设在地方机关）（二）","第七表   公务员基本情况（副省级市机关）（一）","第七表   公务员基本情况（副省级市机关）（二）","第八表   公务员基本情况（市、地、州、盟机关）（一）","第八表   公务员基本情况（市、地、州、盟机关）（二）","第九表   公务员基本情况（县、市、区、旗机关）（一）","第九表   公务员基本情况（县、市、区、旗机关）（二）","第十表   公务员基本情况（街道机关）（一）","第十表   公务员基本情况（街道机关）（二）","第十一表   公务员基本情况（乡、镇机关）（一）","第十一表   公务员基本情况（乡、镇机关）（二）","第十二表   公务员年龄情况（中央一级机关）（一）","第十二表   公务员年龄情况（中央一级机关）（二）","第十二表   公务员年龄情况（中央一级机关）（三）","第十二表   公务员年龄情况（中央一级机关）（四）","第十三表   公务员年龄情况（中央设在地方机关）（一）","第十三表   公务员年龄情况（中央设在地方机关）（二）","第十三表   公务员年龄情况（中央设在地方机关）（三）","第十三表   公务员年龄情况（中央设在地方机关）（四）","第十四表   公务员年龄情况（省、区、市一级机关）（一）","第十四表   公务员年龄情况（省、区、市一级机关）（二）","第十四表   公务员年龄情况（省、区、市一级机关）（三）","第十四表   公务员年龄情况（省、区、市一级机关）（四）","第十五表   公务员年龄情况（省、区、市设在地方机关）（一）","第十五表   公务员年龄情况（省、区、市设在地方机关）（二）","第十五表   公务员年龄情况（省、区、市设在地方机关）（三）","第十五表   公务员年龄情况（省、区、市设在地方机关）（四）","第十六表   公务员年龄情况（副省级市机关）（一）","第十六表   公务员年龄情况（副省级市机关）（二）","第十六表   公务员年龄情况（副省级市机关）（三）","第十六表   公务员年龄情况（副省级市机关）（四）","第十七表   公务员年龄情况（市、地、州、盟机关）（一）","第十七表   公务员年龄情况（市、地、州、盟机关）（二）","第十七表   公务员年龄情况（市、地、州、盟机关）（三）","第十七表   公务员年龄情况（市、地、州、盟机关）（四）","第十八表   公务员年龄情况（县、市、区、旗机关）（一）","第十八表   公务员年龄情况（县、市、区、旗机关）（二）","第十八表   公务员年龄情况（县、市、区、旗机关）（三）","第十八表   公务员年龄情况（县、市、区、旗机关）（四）","第十九表   公务员年龄情况（街道机关）（一）","第十九表   公务员年龄情况（街道机关）（二）","第十九表   公务员年龄情况（街道机关）（三）","第十九表   公务员年龄情况（街道机关）（四）","第二十表   公务员年龄情况（乡、镇机关）（一）","第二十表   公务员年龄情况（乡、镇机关）（二）","第二十表   公务员年龄情况（乡、镇机关）（三）","第二十表   公务员年龄情况（乡、镇机关）（四）","第二十一表   本年内录用公务员情况","第二十二表   本年内退休公务员基本情况（一）","第二十二表   本年内退休公务员基本情况（二）","第二十三表   公务员晋升职务、职级情况（中央一级机关）（一）","第二十三表   公务员晋升职务、职级情况（中央一级机关）（二）","第二十四表   公务员晋升职务、职级情况（中央设在地方机关）（一）","第二十四表   公务员晋升职务、职级情况（中央设在地方机关）（二）","第二十五表   公务员晋升职务、职级情况（省、区、市一级机关）（一）","第二十五表   公务员晋升职务、职级情况（省、区、市一级机关）（二）","第二十六表   公务员晋升职务、职级情况（省、区、市设在地方机关）（一）","第二十六表   公务员晋升职务、职级情况（省、区、市设在地方机关）（二）","第二十七表   公务员晋升职务、职级情况（副省级市机关）（一）","第二十七表   公务员晋升职务、职级情况（副省级市机关）（二）","第二十八表   公务员晋升职务、职级情况（市、地、州、盟机关）（一）","第二十八表   公务员晋升职务、职级情况（市、地、州、盟机关）（二）","第二十九表   公务员晋升职务、职级情况（县、市、区、旗机关）（一）","第二十九表   公务员晋升职务、职级情况（县、市、区、旗机关）（二）","第三十表   公务员晋升职务、职级情况（街道机关）（一）","第三十表   公务员晋升职务、职级情况（街道机关）（二）","第三十一表   公务员晋升职务、职级情况（乡、镇机关）（一）","第三十一表   公务员晋升职务、职级情况（乡、镇机关）（二）","第三十二表   公务员公开选拔和竞争上岗情况（一）","第三十二表   公务员公开选拔和竞争上岗情况（二）","第三十三表   公务员交流情况（一）","第三十三表   公务员交流情况（二）","第三十四表   公务员上年度考核情况（一）","第三十四表   公务员上年度考核情况（二）","第三十五表   公务员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（一）","第三十五表   公务员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（二）","第三十五表   公务员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（三）","第三十五表   公务员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（四）","第三十六表   公务员参加培训情况（一）","第三十六表   公务员参加培训情况（二）","第三十七表   综合管理类领导职务兼任职级情况（一）","第三十七表   综合管理类领导职务兼任职级情况（二）","第三十七表   综合管理类领导职务兼任职级情况（三）","第三十七表   综合管理类领导职务兼任职级情况（四）","第三十八表   行政执法类领导职务兼任职级情况（一）","第三十八表   行政执法类领导职务兼任职级情况（二）","第三十八表   行政执法类领导职务兼任职级情况（三）","第三十八表   行政执法类领导职务兼任职级情况（四）","第三十九表   女性公务员基本情况（一）","第三十九表   女性公务员基本情况（二）","第四十表   女性公务员年龄情况（一）","第四十表   女性公务员年龄情况（二）","第四十表   女性公务员年龄情况（三）","第四十表   女性公务员年龄情况（四）","第四十一表   少数民族公务员基本情况（一）","第四十一表   少数民族公务员基本情况（二）","第四十二表   少数民族公务员年龄情况（一）","第四十二表   少数民族公务员年龄情况（二）","第四十二表   少数民族公务员年龄情况（三）","第四十二表   少数民族公务员年龄情况（四）","第四十三表   非中共党员的公务员基本情况（一）","第四十三表   非中共党员的公务员基本情况（二）","第四十四表   非中共党员的公务员年龄情况（一）","第四十四表   非中共党员的公务员年龄情况（二）","第四十四表   非中共党员的公务员年龄情况（三）","第四十四表   非中共党员的公务员年龄情况（四）","第四十五表   专业技术类职级公务员（不含人民警察）基本情况","第四十六表   专业技术类职级公务员（不含人民警察）年龄情况（一）","第四十六表   专业技术类职级公务员（不含人民警察）年龄情况（二）","第四十七表   法官助理、检察官助理和书记员基本情况","第四十八表   法官助理、检察官助理和书记员年龄情况（一）","第四十八表   法官助理、检察官助理和书记员年龄情况（二）","第四十九表   国家综合消防救援队伍分布情况","第五十表   国家综合消防救援队伍基本情况","第五十一表   国家综合消防救援队伍年龄情况（一）","第五十一表   国家综合消防救援队伍年龄情况（二）","第五十二表   公务员基本情况（总表）（一）","第五十二表   公务员基本情况（总表）（二）","第五十三表   公务员年龄情况（总表）（一）","第五十三表   公务员年龄情况（总表）（二）","第五十三表   公务员年龄情况（总表）（三）","第五十三表   公务员年龄情况（总表）（四）","第五十四表   公务员晋升职务、职级情况（总表）（一）","第五十四表   公务员晋升职务、职级情况（总表）（二）","补充第一表   本年度新担任综合管理类领导职务公务员调整前职务职级情况","补充第二表   领导职务公务员任职试用期有关情况","补充第三表   本年度新担任领导职务公务员曾被问责或处分情况","补充第四表   自治区主体少数民族公务员基本情况（一）","补充第四表   自治区主体少数民族公务员基本情况（二）","补充第五表   自治区主体少数民族公务员年龄情况（一）","补充第五表   自治区主体少数民族公务员年龄情况（二）","补充第五表   自治区主体少数民族公务员年龄情况（三）","补充第五表   自治区主体少数民族公务员年龄情况（四）"};
        String[] cgTableArr = {"第一表   参照管理人员数量变化情况（一）","第一表   参照管理人员数量变化情况（二）","第二表   参照管理人员分布情况","第三表   参照管理人员基本情况（中央一级机关）","第四表   参照管理人员基本情况（中央设在地方机关）","第五表   参照管理人员基本情况（省、区、市机关）","第六表   参照管理人员基本情况（副省级市机关）","第七表   参照管理人员基本情况（市、地、州、盟机关）","第八表   参照管理人员基本情况（县、市、区、旗机关）","第九表   参照管理人员年龄情况（中央一级机关）（一）","第九表   参照管理人员年龄情况（中央一级机关）（二）","第十表   参照管理人员年龄情况（中央设在地方机关）（一）","第十表   参照管理人员年龄情况（中央设在地方机关）（二）","第十一表   参照管理人员年龄情况（省、区、市机关）（一）","第十一表   参照管理人员年龄情况（省、区、市机关）（二）","第十二表   参照管理人员年龄情况（副省级市机关）（一）","第十二表   参照管理人员年龄情况（副省级市机关）（二）","第十三表   参照管理人员年龄情况（市、地、州、盟机关）（一）","第十三表   参照管理人员年龄情况（市、地、州、盟机关）（二）","第十四表   参照管理人员年龄情况（县、市、区、旗机关）（一）","第十四表   参照管理人员年龄情况（县、市、区、旗机关）（二）","第十五表   本年内录用参照管理人员情况","第十六表   本年内退休参照管理人员基本情况","第十七表   参照管理人员晋升职务、职级情况（中央一级机关）","第十八表   参照管理人员晋升职务、职级情况（中央设在地方机关）","第十九表   参照管理人员晋升职务、职级情况（省、区、市机关）","第二十表   参照管理人员晋升职务、职级情况（副省级市机关）","第二十一表   参照管理人员晋升职务、职级情况（市、地、州、盟机关）","第二十二表   参照管理人员晋升职务、职级情况（县、市、区、旗机关）","第二十三表   参照管理人员公开选拔和竞争上岗情况","第二十四表   参照管理人员交流情况","第二十五表   参照管理人员上年度考核情况","第二十六表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（一）","第二十六表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（二）","第二十七表   参照管理人员参加培训情况","第二十八表   综合管理类领导职务兼任职级情况（一）","第二十八表   综合管理类领导职务兼任职级情况（二）","第二十八表   综合管理类领导职务兼任职级情况（三）","第二十八表   综合管理类领导职务兼任职级情况（四）","第二十九表   女性参照管理人员基本情况","第三十表   女性参照管理人员年龄情况（一）","第三十表   女性参照管理人员年龄情况（二）","第三十一表   少数民族参照管理人员基本情况","第三十二表   少数民族参照管理人员年龄情况（一）","第三十二表   少数民族参照管理人员年龄情况（二）","第三十三表   非中共党员的参照管理人员基本情况","第三十四表   非中共党员的参照管理人员年龄情况（一）","第三十四表   非中共党员的参照管理人员年龄情况（二）","第三十五表   参照管理人员基本情况（总表）","第三十六表   参照管理人员年龄情况（总表）（一）","第三十六表   参照管理人员年龄情况（总表）（二）","第三十七表   参照管理人员晋升职务、职级情况（总表）","补充第一表   本年度新担任综合管理类领导职务参照管理人员调整前职务职级情况","补充第二表   领导职务参照管理人员任职试用期有关情况","补充第三表   本年度新担任领导职务参照管理人员曾被问责或处分情况","补充第四表   自治区主体少数民族参照管理人员基本情况","补充第五表   自治区主体少数民族参照管理人员年龄情况（一）","补充第五表   自治区主体少数民族参照管理人员年龄情况（二）"};
        String[] qtTableArr = {"第一表   参照管理人员数量变化情况（一）","第一表   参照管理人员数量变化情况（二）","第二表   参照管理人员分布情况","第三表   参照管理人员基本情况（中央一级事业单位）（一）","第三表   参照管理人员基本情况（中央一级事业单位）（二）","第四表   参照管理人员基本情况（中央设在地方事业单位）（一）","第四表   参照管理人员基本情况（中央设在地方事业单位）（二）","第五表   参照管理人员基本情况（省、区、市一级事业单位）（一）","第五表   参照管理人员基本情况（省、区、市一级事业单位）（二）","第六表   参照管理人员基本情况（省、区、市设在地方事业单位）（一）","第六表   参照管理人员基本情况（省、区、市设在地方事业单位）（二）","第七表   参照管理人员基本情况（副省级市事业单位）（一）","第七表   参照管理人员基本情况（副省级市事业单位）（二）","第八表   参照管理人员基本情况（市、地、州、盟事业单位）（一）","第八表   参照管理人员基本情况（市、地、州、盟事业单位）（二）","第九表   参照管理人员基本情况（县、市、区、旗事业单位）（一）","第九表   参照管理人员基本情况（县、市、区、旗事业单位）（二）","第十表   参照管理人员年龄情况（中央一级事业单位）（一）","第十表   参照管理人员年龄情况（中央一级事业单位）（二）","第十表   参照管理人员年龄情况（中央一级事业单位）（三）","第十表   参照管理人员年龄情况（中央一级事业单位）（四）","第十一表   参照管理人员年龄情况（中央设在地方事业单位）（一）","第十一表   参照管理人员年龄情况（中央设在地方事业单位）（二）","第十一表   参照管理人员年龄情况（中央设在地方事业单位）（三）","第十一表   参照管理人员年龄情况（中央设在地方事业单位）（四）","第十二表   参照管理人员年龄情况（省、区、市一级事业单位）（一）","第十二表   参照管理人员年龄情况（省、区、市一级事业单位）（二）","第十二表   参照管理人员年龄情况（省、区、市一级事业单位）（三）","第十二表   参照管理人员年龄情况（省、区、市一级事业单位）（四）","第十三表   参照管理人员年龄情况（省、区、市设在地方事业单位）（一）","第十三表   参照管理人员年龄情况（省、区、市设在地方事业单位）（二）","第十三表   参照管理人员年龄情况（省、区、市设在地方事业单位）（三）","第十三表   参照管理人员年龄情况（省、区、市设在地方事业单位）（四）","第十四表   参照管理人员年龄情况（副省级市事业单位）（一）","第十四表   参照管理人员年龄情况（副省级市事业单位）（二）","第十四表   参照管理人员年龄情况（副省级市事业单位）（三）","第十四表   参照管理人员年龄情况（副省级市事业单位）（四）","第十五表   参照管理人员年龄情况（市、地、州、盟事业单位）（一）","第十五表   参照管理人员年龄情况（市、地、州、盟事业单位）（二）","第十五表   参照管理人员年龄情况（市、地、州、盟事业单位）（三）","第十五表   参照管理人员年龄情况（市、地、州、盟事业单位）（四）","第十六表   参照管理人员年龄情况（县、市、区、旗事业单位）（一）","第十六表   参照管理人员年龄情况（县、市、区、旗事业单位）（二）","第十六表   参照管理人员年龄情况（县、市、区、旗事业单位）（三）","第十六表   参照管理人员年龄情况（县、市、区、旗事业单位）（四）","第十七表   本年内录用参照管理人员情况","第十八表   本年内退休参照管理人员基本情况（一）","第十八表   本年内退休参照管理人员基本情况（二）","第十九表   参照管理人员晋升职务、职级情况（中央一级事业单位）（一）","第十九表   参照管理人员晋升职务、职级情况（中央一级事业单位）（二）","第二十表   参照管理人员晋升职务、职级情况（中央设在地方事业单位）（一）","第二十表   参照管理人员晋升职务、职级情况（中央设在地方事业单位）（二）","第二十一表   参照管理人员晋升职务、职级情况（省、区、市一级事业单位）（一）","第二十一表   参照管理人员晋升职务、职级情况（省、区、市一级事业单位）（二）","第二十二表   参照管理人员晋升职务、职级情况（省、区、市设在地方事业单位）（一）","第二十二表   参照管理人员晋升职务、职级情况（省、区、市设在地方事业单位）（二）","第二十三表   参照管理人员晋升职务、职级情况（副省级市事业单位）（一）","第二十三表   参照管理人员晋升职务、职级情况（副省级市事业单位）（二）","第二十四表   参照管理人员晋升职务、职级情况（市、地、州、盟事业单位）（一）","第二十四表   参照管理人员晋升职务、职级情况（市、地、州、盟事业单位）（二）","第二十五表   参照管理人员晋升职务、职级情况（县、市、区、旗事业单位）（一）","第二十五表   参照管理人员晋升职务、职级情况（县、市、区、旗事业单位）（二）","第二十六表   参照管理人员公开选拔和竞争上岗情况（一）","第二十六表   参照管理人员公开选拔和竞争上岗情况（二）","第二十七表   参照管理人员交流情况（一）","第二十七表   参照管理人员交流情况（二）","第二十八表   参照管理人员上年度考核情况（一）","第二十八表   参照管理人员上年度考核情况（二）","第二十九表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（一）","第二十九表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（二）","第二十九表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（三）","第二十九表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（四）","第三十表   参照管理人员参加培训情况（一）","第三十表   参照管理人员参加培训情况（二）","第三十一表   综合管理类领导职务兼任职级情况（一）","第三十一表   综合管理类领导职务兼任职级情况（二）","第三十一表   综合管理类领导职务兼任职级情况（三）","第三十一表   综合管理类领导职务兼任职级情况（四）","第三十二表   行政执法类领导职务兼任职级情况（一）","第三十二表   行政执法类领导职务兼任职级情况（二）","第三十二表   行政执法类领导职务兼任职级情况（三）","第三十二表   行政执法类领导职务兼任职级情况（四）","第三十三表   女性参照管理人员基本情况（一）","第三十三表   女性参照管理人员基本情况（二）","第三十四表   女性参照管理人员年龄情况（一）","第三十四表   女性参照管理人员年龄情况（二）","第三十四表   女性参照管理人员年龄情况（三）","第三十四表   女性参照管理人员年龄情况（四）","第三十五表   少数民族参照管理人员基本情况（一）","第三十五表   少数民族参照管理人员基本情况（二）","第三十六表   少数民族参照管理人员年龄情况（一）","第三十六表   少数民族参照管理人员年龄情况（二）","第三十六表   少数民族参照管理人员年龄情况（三）","第三十六表   少数民族参照管理人员年龄情况（四）","第三十七表   非中共党员的参照管理人员基本情况（一）","第三十七表   非中共党员的参照管理人员基本情况（二）","第三十八表   非中共党员的参照管理人员年龄情况（一）","第三十八表   非中共党员的参照管理人员年龄情况（二）","第三十八表   非中共党员的参照管理人员年龄情况（三）","第三十八表   非中共党员的参照管理人员年龄情况（四）","第三十九表   专业技术类职级公务员（不含人民警察）基本情况","第四十表   专业技术类职级公务员（不含人民警察）年龄情况（一）","第四十表   专业技术类职级公务员（不含人民警察）年龄情况（二）","第四十一表   参照管理人员基本情况（总表）（一）","第四十一表   参照管理人员基本情况（总表）（二）","第四十二表   参照管理人员年龄情况（总表）（一）","第四十二表   参照管理人员年龄情况（总表）（二）","第四十二表   参照管理人员年龄情况（总表）（三）","第四十二表   参照管理人员年龄情况（总表）（四）","第四十三表   参照管理人员晋升职务、职级情况（总表）（一）","第四十三表   参照管理人员晋升职务、职级情况（总表）（二）","补充第一表   本年度新担任综合管理类领导职务参照管理人员调整前职务职级情况","补充第二表   领导职务参照管理人员任职试用期有关情况","补充第三表   本年度新担任领导职务参照管理人员曾被问责或处分情况","补充第四表   自治区主体少数民族参照管理人员基本情况（一）","补充第四表   自治区主体少数民族参照管理人员基本情况（二）","补充第五表   自治区主体少数民族参照管理人员年龄情况（一）","补充第五表   自治区主体少数民族参照管理人员年龄情况（二）","补充第五表   自治区主体少数民族参照管理人员年龄情况（三）","补充第五表   自治区主体少数民族参照管理人员年龄情况（四）"};

        // 创建一个 JFrame 实例
        JFrame frame = new JFrame("查找报表数量有差距的单位（公务员）S");

        // 创建标签、输入框、下拉框、文本框和按钮
        JLabel yearLabel = new JLabel("年报年份:");

        Object[] yearArr = YearUtil.getYear();
        String[] yearOptions = (String[])yearArr[0];

        JComboBox<String> yearComboBox = getComboBox(yearOptions,300,30);

        if(yearArr[1] != null){
            String defaultYear = (String)yearArr[1];
            yearComboBox.setSelectedIndex(ArrayUtil.indexOf(yearOptions,defaultYear));
        }

        JLabel unitLabel = new JLabel("单位名称:");
        JTextField unitText = getInput(330,30);

        JLabel typeLabel = new JLabel("报表类型:");
        String[] typeOptions = {"(1)公务员统计表" ,"(2)参照公务员法管理的群团机关工作人员统计表","(3)参照公务员法管理的事业单位工作人员统计表"};
        JComboBox<String> typeComboBox = getComboBox(typeOptions,300,30);

        JLabel nameLabel = new JLabel("报表名称:");
        String [] nameOptions=gwyTableArr;
        JComboBox<String> nameComboBox = getComboBox(nameOptions,330,30);

        JLabel rowLabel = new JLabel("报表行数:");
        JTextField rowText = getInput(300,30);
        JLabel colLabel = new JLabel("报表列数:");
        JTextField colText = getInput(330,30);

        JLabel sqlLabel = new JLabel("反查语句:");
        JTextArea sqlArea = getTextArea(100, 20);

        JLabel outLabel = new JLabel("日志输出:");
        JTextArea outArea = getTextArea(690,50);
        JButton button = new JButton("开始执行");
        JButton clearBtn = new JButton("清空日志");
        JButton copyBtn = new JButton("复制所有日志");
        JButton copyUnitBtn = new JButton("复制有差距的单位");

        // 创建面板并添加组件
        JPanel panel = new JPanel();
        panel.add(yearLabel);
        panel.add(yearComboBox);

        panel.add(unitLabel);
        panel.add(unitText);

        panel.add(typeLabel);
        panel.add(typeComboBox);

        panel.add(nameLabel);
        panel.add(nameComboBox);

        panel.add(rowLabel);
        panel.add(rowText);

        panel.add(rowLabel);
        panel.add(rowText);

        panel.add(colLabel);
        panel.add(colText);

        panel.add(sqlLabel);

        JScrollPane scrollPane = new JScrollPane(sqlArea);
        panel.add(scrollPane);

        panel.add(outLabel);
        JScrollPane outAreaScrollPane = new JScrollPane(outArea);
        panel.add(outAreaScrollPane);

        panel.add(button);
        panel.add(clearBtn);
        panel.add(copyUnitBtn);
        panel.add(copyBtn);


        /**
         * 开始执行的点击事件
         */
        button.addActionListener(e -> {
            outArea.setText("");

            //收集页面数据
            QueryInfo queryInfo = new QueryInfo();
            queryInfo.setYear(yearComboBox.getSelectedItem()+"");
            queryInfo.setUnit(unitText.getText().trim());
            queryInfo.setType(typeComboBox.getSelectedItem()+"");
            queryInfo.setName(nameComboBox.getSelectedItem()+"");
            queryInfo.setRow(rowText.getText().trim());
            queryInfo.setCol(colText.getText().trim());
            queryInfo.setSql(sqlArea.getText().trim());

            outArea.append("开始信息校验\n");
            //校验数据
            try {
                String tip = verifyQueryInfo(queryInfo, conn);
                if(StrUtil.isNotEmpty(tip)){
                    outArea.append(tip+"\n");
                    JOptionPane.showMessageDialog(null, tip, "错误", JOptionPane.INFORMATION_MESSAGE);
                    return;
                }

                startFind(queryInfo, conn,outArea);
            }catch (Exception exception) {
                outArea.append("出现异常，程序已经终止！\n");
                JOptionPane.showMessageDialog(null, "校验过程出错！"+exception.getMessage(), "错误", JOptionPane.INFORMATION_MESSAGE);
                ExceptionUtil.writeLog(exception);

                return;
            }
            outArea.append("信息校验完成\n");

        });

        /**
         * 复制日志
         */
        clearBtn.addActionListener(e -> {
            outArea.setText("");
        });

        /**
         * 复制日志
         */
        copyBtn.addActionListener(e -> {
            String text = outArea.getText();
            ClipboardUtil.setStr(text);
        });

        /**
         * 复制单位按钮
         */
        copyUnitBtn.addActionListener(e -> {
            String text = outArea.getText();
            String[] logList = text.split("\n");
            String content = Arrays.stream(logList).filter(ele -> ele.startsWith("单位信息======  ")).collect(Collectors.joining("\n"));
            ClipboardUtil.setStr(content);
        });


        /**
         * 切换报表类型
         */
        typeComboBox.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                    if("(1)公务员统计表".equalsIgnoreCase(typeComboBox.getSelectedItem()+"")){
                        nameComboBox.removeAllItems();
                        for(String eleStr:gwyTableArr){
                            nameComboBox.addItem(eleStr);
                        }
                    }else if("(2)参照公务员法管理的群团机关工作人员统计表".equalsIgnoreCase(typeComboBox.getSelectedItem()+"")){
                        nameComboBox.removeAllItems();
                        for(String eleStr:qtTableArr){
                            nameComboBox.addItem(eleStr);
                        }
                    }else if("(3)参照公务员法管理的事业单位工作人员统计表".equalsIgnoreCase(typeComboBox.getSelectedItem()+"")){
                        nameComboBox.removeAllItems();
                        for(String eleStr:cgTableArr){
                            nameComboBox.addItem(eleStr);
                        }
                    }
                }
            }
        });
        // 将面板添加到框架中
        frame.add(panel);

        // 设置框架属性
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    /**
     * 开始对比有差距的单位
     * @param queryInfo
     * @param conn
     * @param outArea
     * @throws SQLException
     */
    public void startFind(QueryInfo queryInfo, Connection conn,JTextArea outArea) throws SQLException {
        String reportTableName = "J"+queryInfo.getYear().substring(2)+queryInfo.getType();
        queryInfo.setCol("J"+queryInfo.getCol());

        Statement statement = conn.createStatement();
        ResultSet resultSet = statement.executeQuery("select id from tj_un where rptyear='" + queryInfo.getYear() + "' and name='" + queryInfo.getUnit() + "'");
        //机构编码
        String unitId = DBUtil.getStringValue(resultSet, null);
        resultSet.close();

        //查找所有的编码
        resultSet = statement.executeQuery("select id,name from tj_un where id like '" + unitId + "%' and rptyear='" + queryInfo.getYear() + "' and id in (select unid from M_M01 where  M0104='"+queryInfo.getType().replaceAll("0", "")+"' and rpt='2023') and id in (select TBUNITID from tb_set_unit where TBID='"+reportTableName+"') order by id");
        List<Map<String,String>> unitIdList = DBUtil.getFieldMapList(resultSet, resultSet.getMetaData());
        resultSet.close();


        //查找所有报表数据
        Map<String,Double> reportUnitDataMap = new HashMap<>();
        String reportSql = "select unitid,"+queryInfo.getCol()+" from "+reportTableName+" where tableid='"+queryInfo.getName()+"' and unitid like '"+unitId+"%' and rowsid="+queryInfo.getRow()+"";
        outArea.append("报表查询语句："+reportSql+"\n");

        Statement reportStatement = conn.createStatement();
        ResultSet reportRs = reportStatement.executeQuery(reportSql);
        while (reportRs.next()){
            reportUnitDataMap.put(reportRs.getString(1),reportRs.getDouble(2));
        }
        reportRs.close();
        reportStatement.close();

        //开始各单位的反查
        String verifySql = queryInfo.getSql().replaceAll("IN[ ]+\\('001\\.001[\\d\\.a-zA-Z]*'\\)", "like ? ");
        PreparedStatement verifyStatement = conn.prepareStatement(verifySql);
        outArea.append("转化后的反查语句："+verifySql+"\n");
        int index = 1;
        for(Map<String,String> tempUnitMap : unitIdList){
            verifyStatement.setString(1,tempUnitMap.get("ID")+"%");
            ResultSet tempRs = verifyStatement.executeQuery();
            double d = -1;
            if (tempRs.next()) {
                d = tempRs.getDouble(1);
            }
            Double reportValue = reportUnitDataMap.get(tempUnitMap.get("ID"));
            if (reportValue == null) {
                outArea.append("单位信息======  "+tempUnitMap.get("NAME")+" 报表：空"+"，"+"反查："+d+"\n");
            }else if(d != reportValue){
                outArea.append("单位信息======  "+tempUnitMap.get("NAME")+" 报表："+reportValue+"，"+"反查："+d+"\n");
            }

            outArea.append("已经完成"+index+"/"+unitIdList.size()+"个单位，当前单位为"+tempUnitMap.get("NAME")+"\n");
            index++;
        }

    }


    public static JTextField getInput(int width,int height) {
        JTextField textField = new JTextField(); // 10 是文本框的列数，可以调整文本框的宽度
        textField.setPreferredSize(new Dimension(width, height)); // 设置文本框的宽度和高度

        return textField;
    }

    public static JComboBox getComboBox(String[] typeOptions,int width,int height) {
        JComboBox<String> comboBox = new JComboBox<>(typeOptions);
        comboBox.setPreferredSize(new Dimension(width, height));
        return comboBox;
    }

    public static JTextArea getTextArea(int width,int height) {
        JTextArea textArea = new JTextArea(10, 63);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        return textArea;
    }


    /**
     * 验证填写的信息是否正确
     * @param queryInfo
     * @return
     */
    public String verifyQueryInfo(QueryInfo queryInfo,Connection conn) throws SQLException {
        if(StrUtil.isBlank(queryInfo.getYear()) || "null".equals(queryInfo.getYear())){
            return "年份没有填写!";
        }
        if(StrUtil.isBlank(queryInfo.getUnit())){
            return "单位名称没有填写!";
        }
        if(StrUtil.isBlank(queryInfo.getType()) || "null".equals(queryInfo.getType())){
            return "查询类型没有填写!";
        }
        if(StrUtil.isBlank(queryInfo.getName()) || "null".equals(queryInfo.getName())){
            return "报表名称没有填写!";
        }
        if(StrUtil.isBlank(queryInfo.getRow())){
            return "行数没有填写!";
        }
        if(StrUtil.isBlank(queryInfo.getCol())){
            return "列数没有填写!";
        }
        if(StrUtil.isBlank(queryInfo.getSql())){
            return "反查语句没有填写!";
        }

        Statement statement = conn.createStatement();
        ResultSet resultSet = statement.executeQuery("select count(1) cut from tj_un where rptyear='" + queryInfo.getYear() + "' and name='" + queryInfo.getUnit() + "'");
        if(resultSet.next()){
            if(resultSet.getInt(1) == 0){
                return "没有找到该单位，请检查是否填写和系统的一致!";
            }
            if(resultSet.getInt(1) > 1){
                return "系统有多个重名的单位，无法继续查询!";
            }
        }
        resultSet.close();
        statement.close();

        String typeCode = getTypeCode(queryInfo.getType());
        queryInfo.setType(typeCode);
        if(StrUtil.isBlank(typeCode)){
            return "没有找到该报表类型!";
        }

        String tableId = null;
        if("01".equalsIgnoreCase(queryInfo.getType())){
            tableId = getGWYTableId(queryInfo.getName());
        }else if("02".equalsIgnoreCase(queryInfo.getType())){
            tableId = getQTTableId(queryInfo.getName());
        }else if("03".equalsIgnoreCase(queryInfo.getType())){
            tableId = getCGTableId(queryInfo.getName());
        }
        if(StrUtil.isBlank(tableId)){
            return "没有找到该报表!";
        }
        queryInfo.setName(tableId); //替换成编码

        if(!queryInfo.getRow().matches("\\d+")){
            return "行数不是数字!";
        }
        if(!queryInfo.getCol().matches("\\d+")){
            return "列数不是数字!";
        }

        Pattern pattern = Pattern.compile("IN[ ]+\\('001\\.001[\\d\\.a-zA-Z]*'\\)");
        Matcher matcher = pattern.matcher(queryInfo.getSql());
        if(!matcher.find()){
            return "反查语句中没有包含M_MXX.UNID IN ('机构编码')!";
        }

        return null;
    }


    /**
     * 查找报表类型编码
     * @param name
     * @return
     */
    public String getTypeCode(String name){
        Map<String,String> nameMap = new HashMap<>();
        nameMap.put("(1)公务员统计表","01");
        nameMap.put("(2)参照公务员法管理的群团机关工作人员统计表","02");
        nameMap.put("(3)参照公务员法管理的事业单位工作人员统计表","03");

        return nameMap.get(name);
    }

    /**
     * 获取群团报表
     * @param tableName
     * @return
     */
    public static String getQTTableId(String tableName){
        Map<String,String> nameMap = new HashMap<>();
        nameMap.put("第一表   参照管理人员数量变化情况（一）","J2302001");
        nameMap.put("第一表   参照管理人员数量变化情况（二）","J2302002");
        nameMap.put("第二表   参照管理人员分布情况","J2302003");
        nameMap.put("第三表   参照管理人员基本情况（中央一级机关）","J2302004");
        nameMap.put("第四表   参照管理人员基本情况（中央设在地方机关）","J2302005");
        nameMap.put("第五表   参照管理人员基本情况（省、区、市机关）","J2302006");
        nameMap.put("第六表   参照管理人员基本情况（副省级市机关）","J2302007");
        nameMap.put("第七表   参照管理人员基本情况（市、地、州、盟机关）","J2302008");
        nameMap.put("第八表   参照管理人员基本情况（县、市、区、旗机关）","J2302009");
        nameMap.put("第九表   参照管理人员年龄情况（中央一级机关）（一）","J2302010");
        nameMap.put("第九表   参照管理人员年龄情况（中央一级机关）（二）","J2302011");
        nameMap.put("第十表   参照管理人员年龄情况（中央设在地方机关）（一）","J2302012");
        nameMap.put("第十表   参照管理人员年龄情况（中央设在地方机关）（二）","J2302013");
        nameMap.put("第十一表   参照管理人员年龄情况（省、区、市机关）（一）","J2302014");
        nameMap.put("第十一表   参照管理人员年龄情况（省、区、市机关）（二）","J2302015");
        nameMap.put("第十二表   参照管理人员年龄情况（副省级市机关）（一）","J2302016");
        nameMap.put("第十二表   参照管理人员年龄情况（副省级市机关）（二）","J2302017");
        nameMap.put("第十三表   参照管理人员年龄情况（市、地、州、盟机关）（一）","J2302018");
        nameMap.put("第十三表   参照管理人员年龄情况（市、地、州、盟机关）（二）","J2302019");
        nameMap.put("第十四表   参照管理人员年龄情况（县、市、区、旗机关）（一）","J2302020");
        nameMap.put("第十四表   参照管理人员年龄情况（县、市、区、旗机关）（二）","J2302021");
        nameMap.put("第十五表   本年内录用参照管理人员情况","J2302022");
        nameMap.put("第十六表   本年内退休参照管理人员基本情况","J2302023");
        nameMap.put("第十七表   参照管理人员晋升职务、职级情况（中央一级机关）","J2302024");
        nameMap.put("第十八表   参照管理人员晋升职务、职级情况（中央设在地方机关）","J2302025");
        nameMap.put("第十九表   参照管理人员晋升职务、职级情况（省、区、市机关）","J2302026");
        nameMap.put("第二十表   参照管理人员晋升职务、职级情况（副省级市机关）","J2302027");
        nameMap.put("第二十一表   参照管理人员晋升职务、职级情况（市、地、州、盟机关）","J2302028");
        nameMap.put("第二十二表   参照管理人员晋升职务、职级情况（县、市、区、旗机关）","J2302029");
        nameMap.put("第二十三表   参照管理人员公开选拔和竞争上岗情况","J2302030");
        nameMap.put("第二十四表   参照管理人员交流情况","J2302031");
        nameMap.put("第二十五表   参照管理人员上年度考核情况","J2302032");
        nameMap.put("第二十六表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（一）","J2302033");
        nameMap.put("第二十六表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（二）","J2302034");
        nameMap.put("第二十七表   参照管理人员参加培训情况","J2302035");
        nameMap.put("第二十八表   综合管理类领导职务兼任职级情况（一）","J2302036");
        nameMap.put("第二十八表   综合管理类领导职务兼任职级情况（二）","J2302037");
        nameMap.put("第二十八表   综合管理类领导职务兼任职级情况（三）","J2302038");
        nameMap.put("第二十八表   综合管理类领导职务兼任职级情况（四）","J2302039");
        nameMap.put("第二十九表   女性参照管理人员基本情况","J2302040");
        nameMap.put("第三十表   女性参照管理人员年龄情况（一）","J2302041");
        nameMap.put("第三十表   女性参照管理人员年龄情况（二）","J2302042");
        nameMap.put("第三十一表   少数民族参照管理人员基本情况","J2302043");
        nameMap.put("第三十二表   少数民族参照管理人员年龄情况（一）","J2302044");
        nameMap.put("第三十二表   少数民族参照管理人员年龄情况（二）","J2302045");
        nameMap.put("第三十三表   非中共党员的参照管理人员基本情况","J2302046");
        nameMap.put("第三十四表   非中共党员的参照管理人员年龄情况（一）","J2302047");
        nameMap.put("第三十四表   非中共党员的参照管理人员年龄情况（二）","J2302048");
        nameMap.put("第三十五表   参照管理人员基本情况（总表）","J2302049");
        nameMap.put("第三十六表   参照管理人员年龄情况（总表）（一）","J2302050");
        nameMap.put("第三十六表   参照管理人员年龄情况（总表）（二）","J2302051");
        nameMap.put("第三十七表   参照管理人员晋升职务、职级情况（总表）","J2302052");
        nameMap.put("补充第一表   本年度新担任综合管理类领导职务参照管理人员调整前职务职级情况","J2302053");
        nameMap.put("补充第二表   领导职务参照管理人员任职试用期有关情况","J2302054");
        nameMap.put("补充第三表   本年度新担任领导职务参照管理人员曾被问责或处分情况","J2302055");
        nameMap.put("补充第四表   自治区主体少数民族参照管理人员基本情况","J2302056");
        nameMap.put("补充第五表   自治区主体少数民族参照管理人员年龄情况（一）","J2302057");
        nameMap.put("补充第五表   自治区主体少数民族参照管理人员年龄情况（二）","J2302058");

        return nameMap.get(tableName);
    }


    /**
     * 根据名称来查找表id
     * @param tableName
     * @return
     */
    public static String getGWYTableId(String tableName){
        Map<String,String> nameMap = new HashMap<>();
        nameMap.put("第一表   公务员数量变化情况（一）","J2301001");
        nameMap.put("第一表   公务员数量变化情况（二）","J2301002");
        nameMap.put("第二表   公务员分布情况","J2301003");
        nameMap.put("第三表   公务员基本情况（中央一级机关）（一）","J2301004");
        nameMap.put("第三表   公务员基本情况（中央一级机关）（二）","J2301005");
        nameMap.put("第四表   公务员基本情况（中央设在地方机关）（一）","J2301006");
        nameMap.put("第四表   公务员基本情况（中央设在地方机关）（二）","J2301007");
        nameMap.put("第五表   公务员基本情况（省、区、市一级机关）（一）","J2301008");
        nameMap.put("第五表   公务员基本情况（省、区、市一级机关）（二）","J2301009");
        nameMap.put("第六表   公务员基本情况（省、区、市设在地方机关）（一）","J2301010");
        nameMap.put("第六表   公务员基本情况（省、区、市设在地方机关）（二）","J2301011");
        nameMap.put("第七表   公务员基本情况（副省级市机关）（一）","J2301012");
        nameMap.put("第七表   公务员基本情况（副省级市机关）（二）","J2301013");
        nameMap.put("第八表   公务员基本情况（市、地、州、盟机关）（一）","J2301014");
        nameMap.put("第八表   公务员基本情况（市、地、州、盟机关）（二）","J2301015");
        nameMap.put("第九表   公务员基本情况（县、市、区、旗机关）（一）","J2301016");
        nameMap.put("第九表   公务员基本情况（县、市、区、旗机关）（二）","J2301017");
        nameMap.put("第十表   公务员基本情况（街道机关）（一）","J2301018");
        nameMap.put("第十表   公务员基本情况（街道机关）（二）","J2301019");
        nameMap.put("第十一表   公务员基本情况（乡、镇机关）（一）","J2301020");
        nameMap.put("第十一表   公务员基本情况（乡、镇机关）（二）","J2301021");
        nameMap.put("第十二表   公务员年龄情况（中央一级机关）（一）","J2301022");
        nameMap.put("第十二表   公务员年龄情况（中央一级机关）（二）","J2301023");
        nameMap.put("第十二表   公务员年龄情况（中央一级机关）（三）","J2301024");
        nameMap.put("第十二表   公务员年龄情况（中央一级机关）（四）","J2301025");
        nameMap.put("第十三表   公务员年龄情况（中央设在地方机关）（一）","J2301026");
        nameMap.put("第十三表   公务员年龄情况（中央设在地方机关）（二）","J2301027");
        nameMap.put("第十三表   公务员年龄情况（中央设在地方机关）（三）","J2301028");
        nameMap.put("第十三表   公务员年龄情况（中央设在地方机关）（四）","J2301029");
        nameMap.put("第十四表   公务员年龄情况（省、区、市一级机关）（一）","J2301030");
        nameMap.put("第十四表   公务员年龄情况（省、区、市一级机关）（二）","J2301031");
        nameMap.put("第十四表   公务员年龄情况（省、区、市一级机关）（三）","J2301032");
        nameMap.put("第十四表   公务员年龄情况（省、区、市一级机关）（四）","J2301033");
        nameMap.put("第十五表   公务员年龄情况（省、区、市设在地方机关）（一）","J2301034");
        nameMap.put("第十五表   公务员年龄情况（省、区、市设在地方机关）（二）","J2301035");
        nameMap.put("第十五表   公务员年龄情况（省、区、市设在地方机关）（三）","J2301036");
        nameMap.put("第十五表   公务员年龄情况（省、区、市设在地方机关）（四）","J2301037");
        nameMap.put("第十六表   公务员年龄情况（副省级市机关）（一）","J2301038");
        nameMap.put("第十六表   公务员年龄情况（副省级市机关）（二）","J2301039");
        nameMap.put("第十六表   公务员年龄情况（副省级市机关）（三）","J2301040");
        nameMap.put("第十六表   公务员年龄情况（副省级市机关）（四）","J2301041");
        nameMap.put("第十七表   公务员年龄情况（市、地、州、盟机关）（一）","J2301042");
        nameMap.put("第十七表   公务员年龄情况（市、地、州、盟机关）（二）","J2301043");
        nameMap.put("第十七表   公务员年龄情况（市、地、州、盟机关）（三）","J2301044");
        nameMap.put("第十七表   公务员年龄情况（市、地、州、盟机关）（四）","J2301045");
        nameMap.put("第十八表   公务员年龄情况（县、市、区、旗机关）（一）","J2301046");
        nameMap.put("第十八表   公务员年龄情况（县、市、区、旗机关）（二）","J2301047");
        nameMap.put("第十八表   公务员年龄情况（县、市、区、旗机关）（三）","J2301048");
        nameMap.put("第十八表   公务员年龄情况（县、市、区、旗机关）（四）","J2301049");
        nameMap.put("第十九表   公务员年龄情况（街道机关）（一）","J2301050");
        nameMap.put("第十九表   公务员年龄情况（街道机关）（二）","J2301051");
        nameMap.put("第十九表   公务员年龄情况（街道机关）（三）","J2301052");
        nameMap.put("第十九表   公务员年龄情况（街道机关）（四）","J2301053");
        nameMap.put("第二十表   公务员年龄情况（乡、镇机关）（一）","J2301054");
        nameMap.put("第二十表   公务员年龄情况（乡、镇机关）（二）","J2301055");
        nameMap.put("第二十表   公务员年龄情况（乡、镇机关）（三）","J2301056");
        nameMap.put("第二十表   公务员年龄情况（乡、镇机关）（四）","J2301057");
        nameMap.put("第二十一表   本年内录用公务员情况","J2301058");
        nameMap.put("第二十二表   本年内退休公务员基本情况（一）","J2301059");
        nameMap.put("第二十二表   本年内退休公务员基本情况（二）","J2301060");
        nameMap.put("第二十三表   公务员晋升职务、职级情况（中央一级机关）（一）","J2301061");
        nameMap.put("第二十三表   公务员晋升职务、职级情况（中央一级机关）（二）","J2301062");
        nameMap.put("第二十四表   公务员晋升职务、职级情况（中央设在地方机关）（一）","J2301063");
        nameMap.put("第二十四表   公务员晋升职务、职级情况（中央设在地方机关）（二）","J2301064");
        nameMap.put("第二十五表   公务员晋升职务、职级情况（省、区、市一级机关）（一）","J2301065");
        nameMap.put("第二十五表   公务员晋升职务、职级情况（省、区、市一级机关）（二）","J2301066");
        nameMap.put("第二十六表   公务员晋升职务、职级情况（省、区、市设在地方机关）（一）","J2301067");
        nameMap.put("第二十六表   公务员晋升职务、职级情况（省、区、市设在地方机关）（二）","J2301068");
        nameMap.put("第二十七表   公务员晋升职务、职级情况（副省级市机关）（一）","J2301069");
        nameMap.put("第二十七表   公务员晋升职务、职级情况（副省级市机关）（二）","J2301070");
        nameMap.put("第二十八表   公务员晋升职务、职级情况（市、地、州、盟机关）（一）","J2301071");
        nameMap.put("第二十八表   公务员晋升职务、职级情况（市、地、州、盟机关）（二）","J2301072");
        nameMap.put("第二十九表   公务员晋升职务、职级情况（县、市、区、旗机关）（一）","J2301073");
        nameMap.put("第二十九表   公务员晋升职务、职级情况（县、市、区、旗机关）（二）","J2301074");
        nameMap.put("第三十表   公务员晋升职务、职级情况（街道机关）（一）","J2301075");
        nameMap.put("第三十表   公务员晋升职务、职级情况（街道机关）（二）","J2301076");
        nameMap.put("第三十一表   公务员晋升职务、职级情况（乡、镇机关）（一）","J2301077");
        nameMap.put("第三十一表   公务员晋升职务、职级情况（乡、镇机关）（二）","J2301078");
        nameMap.put("第三十二表   公务员公开选拔和竞争上岗情况（一）","J2301079");
        nameMap.put("第三十二表   公务员公开选拔和竞争上岗情况（二）","J2301080");
        nameMap.put("第三十三表   公务员交流情况（一）","J2301081");
        nameMap.put("第三十三表   公务员交流情况（二）","J2301082");
        nameMap.put("第三十四表   公务员上年度考核情况（一）","J2301083");
        nameMap.put("第三十四表   公务员上年度考核情况（二）","J2301084");
        nameMap.put("第三十五表   公务员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（一）","J2301085");
        nameMap.put("第三十五表   公务员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（二）","J2301086");
        nameMap.put("第三十五表   公务员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（三）","J2301087");
        nameMap.put("第三十五表   公务员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（四）","J2301088");
        nameMap.put("第三十六表   公务员参加培训情况（一）","J2301089");
        nameMap.put("第三十六表   公务员参加培训情况（二）","J2301090");
        nameMap.put("第三十七表   综合管理类领导职务兼任职级情况（一）","J2301091");
        nameMap.put("第三十七表   综合管理类领导职务兼任职级情况（二）","J2301092");
        nameMap.put("第三十七表   综合管理类领导职务兼任职级情况（三）","J2301093");
        nameMap.put("第三十七表   综合管理类领导职务兼任职级情况（四）","J2301094");
        nameMap.put("第三十八表   行政执法类领导职务兼任职级情况（一）","J2301095");
        nameMap.put("第三十八表   行政执法类领导职务兼任职级情况（二）","J2301096");
        nameMap.put("第三十八表   行政执法类领导职务兼任职级情况（三）","J2301097");
        nameMap.put("第三十八表   行政执法类领导职务兼任职级情况（四）","J2301098");
        nameMap.put("第三十九表   女性公务员基本情况（一）","J2301099");
        nameMap.put("第三十九表   女性公务员基本情况（二）","J2301100");
        nameMap.put("第四十表   女性公务员年龄情况（一）","J2301101");
        nameMap.put("第四十表   女性公务员年龄情况（二）","J2301102");
        nameMap.put("第四十表   女性公务员年龄情况（三）","J2301103");
        nameMap.put("第四十表   女性公务员年龄情况（四）","J2301104");
        nameMap.put("第四十一表   少数民族公务员基本情况（一）","J2301105");
        nameMap.put("第四十一表   少数民族公务员基本情况（二）","J2301106");
        nameMap.put("第四十二表   少数民族公务员年龄情况（一）","J2301107");
        nameMap.put("第四十二表   少数民族公务员年龄情况（二）","J2301108");
        nameMap.put("第四十二表   少数民族公务员年龄情况（三）","J2301109");
        nameMap.put("第四十二表   少数民族公务员年龄情况（四）","J2301110");
        nameMap.put("第四十三表   非中共党员的公务员基本情况（一）","J2301111");
        nameMap.put("第四十三表   非中共党员的公务员基本情况（二）","J2301112");
        nameMap.put("第四十四表   非中共党员的公务员年龄情况（一）","J2301113");
        nameMap.put("第四十四表   非中共党员的公务员年龄情况（二）","J2301114");
        nameMap.put("第四十四表   非中共党员的公务员年龄情况（三）","J2301115");
        nameMap.put("第四十四表   非中共党员的公务员年龄情况（四）","J2301116");
        nameMap.put("第四十五表   专业技术类职级公务员（不含人民警察）基本情况","J2301117");
        nameMap.put("第四十六表   专业技术类职级公务员（不含人民警察）年龄情况（一）","J2301118");
        nameMap.put("第四十六表   专业技术类职级公务员（不含人民警察）年龄情况（二）","J2301119");
        nameMap.put("第四十七表   法官助理、检察官助理和书记员基本情况","J2301120");
        nameMap.put("第四十八表   法官助理、检察官助理和书记员年龄情况（一）","J2301121");
        nameMap.put("第四十八表   法官助理、检察官助理和书记员年龄情况（二）","J2301122");
        nameMap.put("第四十九表   国家综合消防救援队伍分布情况","J2301123");
        nameMap.put("第五十表   国家综合消防救援队伍基本情况","J2301124");
        nameMap.put("第五十一表   国家综合消防救援队伍年龄情况（一）","J2301125");
        nameMap.put("第五十一表   国家综合消防救援队伍年龄情况（二）","J2301126");
        nameMap.put("第五十二表   公务员基本情况（总表）（一）","J2301127");
        nameMap.put("第五十二表   公务员基本情况（总表）（二）","J2301128");
        nameMap.put("第五十三表   公务员年龄情况（总表）（一）","J2301129");
        nameMap.put("第五十三表   公务员年龄情况（总表）（二）","J2301130");
        nameMap.put("第五十三表   公务员年龄情况（总表）（三）","J2301131");
        nameMap.put("第五十三表   公务员年龄情况（总表）（四）","J2301132");
        nameMap.put("第五十四表   公务员晋升职务、职级情况（总表）（一）","J2301133");
        nameMap.put("第五十四表   公务员晋升职务、职级情况（总表）（二）","J2301134");
        nameMap.put("补充第一表   本年度新担任综合管理类领导职务公务员调整前职务职级情况","J2301135");
        nameMap.put("补充第二表   领导职务公务员任职试用期有关情况","J2301136");
        nameMap.put("补充第三表   本年度新担任领导职务公务员曾被问责或处分情况","J2301137");
        nameMap.put("补充第四表   自治区主体少数民族公务员基本情况（一）","J2301138");
        nameMap.put("补充第四表   自治区主体少数民族公务员基本情况（二）","J2301139");
        nameMap.put("补充第五表   自治区主体少数民族公务员年龄情况（一）","J2301140");
        nameMap.put("补充第五表   自治区主体少数民族公务员年龄情况（二）","J2301141");
        nameMap.put("补充第五表   自治区主体少数民族公务员年龄情况（三）","J2301142");
        nameMap.put("补充第五表   自治区主体少数民族公务员年龄情况（四）","J2301143");

        return nameMap.get(tableName);
    }

    /**
     * 参公
     * @param name
     * @return
     */
    public String getCGTableId(String name){
        Map<String,String> nameMap = new HashMap<>();
        nameMap.put("第一表   参照管理人员数量变化情况（一）","J2303001");
        nameMap.put("第一表   参照管理人员数量变化情况（二）","J2303002");
        nameMap.put("第二表   参照管理人员分布情况","J2303003");
        nameMap.put("第三表   参照管理人员基本情况（中央一级事业单位）（一）","J2303004");
        nameMap.put("第三表   参照管理人员基本情况（中央一级事业单位）（二）","J2303005");
        nameMap.put("第四表   参照管理人员基本情况（中央设在地方事业单位）（一）","J2303006");
        nameMap.put("第四表   参照管理人员基本情况（中央设在地方事业单位）（二）","J2303007");
        nameMap.put("第五表   参照管理人员基本情况（省、区、市一级事业单位）（一）","J2303008");
        nameMap.put("第五表   参照管理人员基本情况（省、区、市一级事业单位）（二）","J2303009");
        nameMap.put("第六表   参照管理人员基本情况（省、区、市设在地方事业单位）（一）","J2303010");
        nameMap.put("第六表   参照管理人员基本情况（省、区、市设在地方事业单位）（二）","J2303011");
        nameMap.put("第七表   参照管理人员基本情况（副省级市事业单位）（一）","J2303012");
        nameMap.put("第七表   参照管理人员基本情况（副省级市事业单位）（二）","J2303013");
        nameMap.put("第八表   参照管理人员基本情况（市、地、州、盟事业单位）（一）","J2303014");
        nameMap.put("第八表   参照管理人员基本情况（市、地、州、盟事业单位）（二）","J2303015");
        nameMap.put("第九表   参照管理人员基本情况（县、市、区、旗事业单位）（一）","J2303016");
        nameMap.put("第九表   参照管理人员基本情况（县、市、区、旗事业单位）（二）","J2303017");
        nameMap.put("第十表   参照管理人员年龄情况（中央一级事业单位）（一）","J2303018");
        nameMap.put("第十表   参照管理人员年龄情况（中央一级事业单位）（二）","J2303019");
        nameMap.put("第十表   参照管理人员年龄情况（中央一级事业单位）（三）","J2303020");
        nameMap.put("第十表   参照管理人员年龄情况（中央一级事业单位）（四）","J2303021");
        nameMap.put("第十一表   参照管理人员年龄情况（中央设在地方事业单位）（一）","J2303022");
        nameMap.put("第十一表   参照管理人员年龄情况（中央设在地方事业单位）（二）","J2303023");
        nameMap.put("第十一表   参照管理人员年龄情况（中央设在地方事业单位）（三）","J2303024");
        nameMap.put("第十一表   参照管理人员年龄情况（中央设在地方事业单位）（四）","J2303025");
        nameMap.put("第十二表   参照管理人员年龄情况（省、区、市一级事业单位）（一）","J2303026");
        nameMap.put("第十二表   参照管理人员年龄情况（省、区、市一级事业单位）（二）","J2303027");
        nameMap.put("第十二表   参照管理人员年龄情况（省、区、市一级事业单位）（三）","J2303028");
        nameMap.put("第十二表   参照管理人员年龄情况（省、区、市一级事业单位）（四）","J2303029");
        nameMap.put("第十三表   参照管理人员年龄情况（省、区、市设在地方事业单位）（一）","J2303030");
        nameMap.put("第十三表   参照管理人员年龄情况（省、区、市设在地方事业单位）（二）","J2303031");
        nameMap.put("第十三表   参照管理人员年龄情况（省、区、市设在地方事业单位）（三）","J2303032");
        nameMap.put("第十三表   参照管理人员年龄情况（省、区、市设在地方事业单位）（四）","J2303033");
        nameMap.put("第十四表   参照管理人员年龄情况（副省级市事业单位）（一）","J2303034");
        nameMap.put("第十四表   参照管理人员年龄情况（副省级市事业单位）（二）","J2303035");
        nameMap.put("第十四表   参照管理人员年龄情况（副省级市事业单位）（三）","J2303036");
        nameMap.put("第十四表   参照管理人员年龄情况（副省级市事业单位）（四）","J2303037");
        nameMap.put("第十五表   参照管理人员年龄情况（市、地、州、盟事业单位）（一）","J2303038");
        nameMap.put("第十五表   参照管理人员年龄情况（市、地、州、盟事业单位）（二）","J2303039");
        nameMap.put("第十五表   参照管理人员年龄情况（市、地、州、盟事业单位）（三）","J2303040");
        nameMap.put("第十五表   参照管理人员年龄情况（市、地、州、盟事业单位）（四）","J2303041");
        nameMap.put("第十六表   参照管理人员年龄情况（县、市、区、旗事业单位）（一）","J2303042");
        nameMap.put("第十六表   参照管理人员年龄情况（县、市、区、旗事业单位）（二）","J2303043");
        nameMap.put("第十六表   参照管理人员年龄情况（县、市、区、旗事业单位）（三）","J2303044");
        nameMap.put("第十六表   参照管理人员年龄情况（县、市、区、旗事业单位）（四）","J2303045");
        nameMap.put("第十七表   本年内录用参照管理人员情况","J2303046");
        nameMap.put("第十八表   本年内退休参照管理人员基本情况（一）","J2303047");
        nameMap.put("第十八表   本年内退休参照管理人员基本情况（二）","J2303048");
        nameMap.put("第十九表   参照管理人员晋升职务、职级情况（中央一级事业单位）（一）","J2303049");
        nameMap.put("第十九表   参照管理人员晋升职务、职级情况（中央一级事业单位）（二）","J2303050");
        nameMap.put("第二十表   参照管理人员晋升职务、职级情况（中央设在地方事业单位）（一）","J2303051");
        nameMap.put("第二十表   参照管理人员晋升职务、职级情况（中央设在地方事业单位）（二）","J2303052");
        nameMap.put("第二十一表   参照管理人员晋升职务、职级情况（省、区、市一级事业单位）（一）","J2303053");
        nameMap.put("第二十一表   参照管理人员晋升职务、职级情况（省、区、市一级事业单位）（二）","J2303054");
        nameMap.put("第二十二表   参照管理人员晋升职务、职级情况（省、区、市设在地方事业单位）（一）","J2303055");
        nameMap.put("第二十二表   参照管理人员晋升职务、职级情况（省、区、市设在地方事业单位）（二）","J2303056");
        nameMap.put("第二十三表   参照管理人员晋升职务、职级情况（副省级市事业单位）（一）","J2303057");
        nameMap.put("第二十三表   参照管理人员晋升职务、职级情况（副省级市事业单位）（二）","J2303058");
        nameMap.put("第二十四表   参照管理人员晋升职务、职级情况（市、地、州、盟事业单位）（一）","J2303059");
        nameMap.put("第二十四表   参照管理人员晋升职务、职级情况（市、地、州、盟事业单位）（二）","J2303060");
        nameMap.put("第二十五表   参照管理人员晋升职务、职级情况（县、市、区、旗事业单位）（一）","J2303061");
        nameMap.put("第二十五表   参照管理人员晋升职务、职级情况（县、市、区、旗事业单位）（二）","J2303062");
        nameMap.put("第二十六表   参照管理人员公开选拔和竞争上岗情况（一）","J2303063");
        nameMap.put("第二十六表   参照管理人员公开选拔和竞争上岗情况（二）","J2303064");
        nameMap.put("第二十七表   参照管理人员交流情况（一）","J2303065");
        nameMap.put("第二十七表   参照管理人员交流情况（二）","J2303066");
        nameMap.put("第二十八表   参照管理人员上年度考核情况（一）","J2303067");
        nameMap.put("第二十八表   参照管理人员上年度考核情况（二）","J2303068");
        nameMap.put("第二十九表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（一）","J2303069");
        nameMap.put("第二十九表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（二）","J2303070");
        nameMap.put("第二十九表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（三）","J2303071");
        nameMap.put("第二十九表   参照管理人员免职、降职、辞去公职、辞退、辞去领导职务、受奖惩和申诉情况（四）","J2303072");
        nameMap.put("第三十表   参照管理人员参加培训情况（一）","J2303073");
        nameMap.put("第三十表   参照管理人员参加培训情况（二）","J2303074");
        nameMap.put("第三十一表   综合管理类领导职务兼任职级情况（一）","J2303075");
        nameMap.put("第三十一表   综合管理类领导职务兼任职级情况（二）","J2303076");
        nameMap.put("第三十一表   综合管理类领导职务兼任职级情况（三）","J2303077");
        nameMap.put("第三十一表   综合管理类领导职务兼任职级情况（四）","J2303078");
        nameMap.put("第三十二表   行政执法类领导职务兼任职级情况（一）","J2303079");
        nameMap.put("第三十二表   行政执法类领导职务兼任职级情况（二）","J2303080");
        nameMap.put("第三十二表   行政执法类领导职务兼任职级情况（三）","J2303081");
        nameMap.put("第三十二表   行政执法类领导职务兼任职级情况（四）","J2303082");
        nameMap.put("第三十三表   女性参照管理人员基本情况（一）","J2303083");
        nameMap.put("第三十三表   女性参照管理人员基本情况（二）","J2303084");
        nameMap.put("第三十四表   女性参照管理人员年龄情况（一）","J2303085");
        nameMap.put("第三十四表   女性参照管理人员年龄情况（二）","J2303086");
        nameMap.put("第三十四表   女性参照管理人员年龄情况（三）","J2303087");
        nameMap.put("第三十四表   女性参照管理人员年龄情况（四）","J2303088");
        nameMap.put("第三十五表   少数民族参照管理人员基本情况（一）","J2303089");
        nameMap.put("第三十五表   少数民族参照管理人员基本情况（二）","J2303090");
        nameMap.put("第三十六表   少数民族参照管理人员年龄情况（一）","J2303091");
        nameMap.put("第三十六表   少数民族参照管理人员年龄情况（二）","J2303092");
        nameMap.put("第三十六表   少数民族参照管理人员年龄情况（三）","J2303093");
        nameMap.put("第三十六表   少数民族参照管理人员年龄情况（四）","J2303094");
        nameMap.put("第三十七表   非中共党员的参照管理人员基本情况（一）","J2303095");
        nameMap.put("第三十七表   非中共党员的参照管理人员基本情况（二）","J2303096");
        nameMap.put("第三十八表   非中共党员的参照管理人员年龄情况（一）","J2303097");
        nameMap.put("第三十八表   非中共党员的参照管理人员年龄情况（二）","J2303098");
        nameMap.put("第三十八表   非中共党员的参照管理人员年龄情况（三）","J2303099");
        nameMap.put("第三十八表   非中共党员的参照管理人员年龄情况（四）","J2303100");
        nameMap.put("第三十九表   专业技术类职级公务员（不含人民警察）基本情况","J2303101");
        nameMap.put("第四十表   专业技术类职级公务员（不含人民警察）年龄情况（一）","J2303102");
        nameMap.put("第四十表   专业技术类职级公务员（不含人民警察）年龄情况（二）","J2303103");
        nameMap.put("第四十一表   参照管理人员基本情况（总表）（一）","J2303104");
        nameMap.put("第四十一表   参照管理人员基本情况（总表）（二）","J2303105");
        nameMap.put("第四十二表   参照管理人员年龄情况（总表）（一）","J2303106");
        nameMap.put("第四十二表   参照管理人员年龄情况（总表）（二）","J2303107");
        nameMap.put("第四十二表   参照管理人员年龄情况（总表）（三）","J2303108");
        nameMap.put("第四十二表   参照管理人员年龄情况（总表）（四）","J2303109");
        nameMap.put("第四十三表   参照管理人员晋升职务、职级情况（总表）（一）","J2303110");
        nameMap.put("第四十三表   参照管理人员晋升职务、职级情况（总表）（二）","J2303111");
        nameMap.put("补充第一表   本年度新担任综合管理类领导职务参照管理人员调整前职务职级情况","J2303112");
        nameMap.put("补充第二表   领导职务参照管理人员任职试用期有关情况","J2303113");
        nameMap.put("补充第三表   本年度新担任领导职务参照管理人员曾被问责或处分情况","J2303114");
        nameMap.put("补充第四表   自治区主体少数民族参照管理人员基本情况（一）","J2303115");
        nameMap.put("补充第四表   自治区主体少数民族参照管理人员基本情况（二）","J2303116");
        nameMap.put("补充第五表   自治区主体少数民族参照管理人员年龄情况（一）","J2303117");
        nameMap.put("补充第五表   自治区主体少数民族参照管理人员年龄情况（二）","J2303118");
        nameMap.put("补充第五表   自治区主体少数民族参照管理人员年龄情况（三）","J2303119");
        nameMap.put("补充第五表   自治区主体少数民族参照管理人员年龄情况（四）","J2303120");

        return nameMap.get(name);
    }

    /**
     * 查询信息
     */
    class QueryInfo{
        private String year;
        private String unit;
        private String type;
        private String name;
        private String row;
        private String col;
        private String sql;
        private String output;


        public QueryInfo(String year, String unit, String type, String name, String row, String col, String sql, String output) {
            this.year = year;
            this.unit = unit;
            this.type = type;
            this.name = name;
            this.row = row;
            this.col = col;
            this.sql = sql;
            this.output = output;
        }

        public String getYear() {
            return year;
        }

        public void setYear(String year) {
            this.year = year;
        }

        public String getUnit() {
            return unit;
        }

        public void setUnit(String unit) {
            this.unit = unit;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getRow() {
            return row;
        }

        public void setRow(String row) {
            this.row = row;
        }

        public String getCol() {
            return col;
        }

        public void setCol(String col) {
            this.col = col;
        }

        public String getSql() {
            return sql;
        }

        public void setSql(String sql) {
            this.sql = sql;
        }

        public String getOutput() {
            return output;
        }

        public void setOutput(String output) {
            this.output = output;
        }

        public QueryInfo() {
        }
    }



}
